/*
 * @Author: your name
 * @Date: 2021-11-11 15:42:10
 * @LastEditTime: 2021-11-16 16:38:09
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: \epet_back\utils\may.js
 */
let qiniu = require('qiniu');
let formidable = require('formidable');
let fs = require('fs');
let configs = require('./config.js');

let qn = {};
//要上传的空间
let bucket = configs.bucket;   //七牛云存储的存储空间名
// 密匙
let accessKey = configs.accessKey;
let secretKey = configs.secretKey;
let mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
// 文件上传（以下俩行代码都是七牛上传文件的配置设置）
let config = new qiniu.conf.Config();
config.zone = qiniu.zone.Zone_z2;  //设置传输机房的位置根据自己的设置选择
let bucketManager = new qiniu.rs.BucketManager(mac, config);

//构建上传策略函数   （获取七牛上传token）
qn.uptoken = bucket => {
    var putPolicy = new qiniu.rs.PutPolicy({ scope: bucket });
    var uploadToken = putPolicy.uploadToken(mac);
    return uploadToken;
}

qn.update = (file, callback) => {
    // console.log(req)
    try {
//         // 判断文件有没有 path 路径参数，没有则用 files.file.filepath 路径参数
//         req.request.files.file.path = req.request.files.file.path || req.request.files.file.filepath
        //上传到七牛后保存的文件名
        let key = new Date().getTime() //+ '-' + files.file.originalFilename;
        //生成上传 Token
        let token = qn.uptoken(bucket);
        //要上传文件的本地路径
        let filePath = file.path;     //如果是表单的数据提交会存储在fields中，图片文件提交会存储在files中 files.file中的file指的是前端设定input的name一般设置为file
        //构造上传函数
        // 文件上传（七牛上传文件的配置设置）
        var formUploader = new qiniu.form_up.FormUploader(config);
        var putExtra = new qiniu.form_up.PutExtra();

        formUploader.putFile(token, key, filePath, putExtra, function (respErr, respBody, respInfo) {
            //上传错误
            if (respErr) return callback({ status: 1, msg: respErr });
            //上传失败
            if (respInfo.statusCode != 200) return callback({ status: 1, msg: respBody });
            //上传成功
            // 输出 JSON 格式  xxx填写自己在七牛中设置的自定义域名
            return callback({ status: 200, msg: 'ok', data: { "url": configs.url + key } });
        });
//     });
    } catch (err){
        console.log(err)
    }
 
}

// 删除文件
qn.delete = (req, res) => {
    try {
        var key = req.body.fileId; // 传递文件名
        bucketManager.delete(bucket, key, function (err, respBody, respInfo) {
            if (err) return res.status(err);
            return res.status('删除成功!', 0)
        });
    } catch (err) {
        if (err) return res.send('错误：', err);
    }
}

// 获取文件列表
qn.list = (req, res) => {
    try {
        // key
        qiniu.conf.ACCESS_KEY = accessKey;
        qiniu.conf.SECRET_KEY = secretKey;

        let option = { limit: 9999 };
        bucketManager.listPrefix(bucket, option, function (respErr, respBody, respInfo) {
            if (respErr) return res.status(respErr);
            if (respBody.error) return res.status(respBody.error);
            return res.send({ status: 0, msg: 'ok', data: respBody })
        });
    } catch (err) {
        if (err) return res.send('错误：', err);
    }
}

module.exports = qn;
